package main

import "fmt"

func main() {
	ReadFile()
	ReadFile2()
	loopDefer()
}

//操作文件常规写法
func ReadFile() bool {
	fmt.Println("打开文件...")
	fmt.Println("处理文件...")
	fail1 := true
	if fail1 {
		fmt.Println("关闭文件...")
		return false
	}
	fail2 := true
	if fail2 {
		fmt.Println("关闭文件...")
		return false
	}
	fmt.Println("关闭文件...")
	return true
}

//defer表示延迟执行语句，可简化上述关闭文件操作
func ReadFile2() bool {
	fmt.Println("打开文件...")
	defer fmt.Println("关闭文件...") //defer语句会在return之前执行
	fmt.Println("处理文件...")
	fail1 := true
	if fail1 {
		return false
	}
	fail2 := true
	if fail2 {
		return false
	}
	return true
}

//如果多次调用defer，那么defer采用后进先出模式
func loopDefer() {
	for i := 0; i < 5; i++ {
		defer fmt.Printf("defer: %d ", i)
	}
}
